23

» WarCraft 3 / Вопрос про работу переменных

Похожие вопросы:

ответ
Спасибо всем за ответы и пояснения! Закрываю флудильню :с
ответ
в чем редактор вкв3 отличается от редактора ск2 - к сожалению, в вк3-шном эдиторе не удастся отловить все данные.
если ты скажешь, что конкретно делает твой спелл, тебе могут подсказать более легкий вариант исполнения
насчет спецэффектов - утечка решается просто
  1. создаешь точку, если спец на земле. если спец на юните, точка не требуется.
  2. собсно воспроизводишь спец
  3. и сразу его удаляешь. спец удалится тогда, когда доиграет до конца его анимация
  4. кастом скриптом удаляешь точку, если 1 часть 1 пункта актуальна
ответ
Igor97, если не знаешь jass то и не трогай то что написано на jass
или учи jass
если коротко то у тебя конфликт имён функций и глобальных переменных из за того что ты тупо скопировал
чтобы конфликта не было во 2 триггере надо переименовать все функции

23

» WarCraft 3 / Как нанести урон триггерно?

Похожие вопросы:

ответ
Останавливаешь юнит во время каста заклинания.
Создаёшь дамика.
Даёшь кастуемую способность.
Даёшь приказы на направление способности.
другой триггер отлавливает получение урона юнитами и если тип источника урона - дамми, то нанести такой-то урон от лица героя-хозяина.
ответ
Это есть в триггерах
Боевая единица - Damage Target (Или русских тригах Урон цели или Нанести урон (юниту))
А в Jass выглядит так:
native UnitDamageTarget takes unit whichUnit, widget target, real amount, boolean attack, boolean ranged, attacktype attackType, damagetype damageType, weapontype weaponType returns boolean
ответ
Учебник по математике открыть и посмотреть, как высчитываются проценты.
ответ
~8gabriel8:
Ещё можешь наносить вместо отравления иной бафф, а отравлять даммиком. По этому баффу сможешь различать урон от автоатаки и способности.
ответ
Вот типы урона "Огня преисподней":
if BlzGetEventAttackType( ) == ConvertAttackType( 0 ) and BlzGetEventDamageType( ) == ConvertDamageType( 8 ) and BlzGetEventWeaponType( ) == ConvertWeaponType( 0 ) then
Bergi_Bear, ну там же всё интуитивно понятно:
BlzGetEventAttackType( ) - возвращает тип атаки.
BlzSetEventAttackType( ) - меняет тип атаки.

23

» WarCraft 3 / Увеличение дальности атаки (Улучшение)

Похожие вопросы:

ответ
так это самый простой вариант там приказ сам отлавливать .а не замах я так к примеру написал ( но гемора с проверками будет много мне кажется )
можно еще посути менять дистанцию получение приказа на отаку менять у юнита
call SetUnitAcquireRangeBJ( gg_unit_Hblm_0000, 100.00 )
кароч сделал только до ума довести нужно но вроде все работает.

23

» WarCraft 3 / Награда за убийство нейтрально-враждебного

Похожие вопросы:

ответ
Работай с real (числа с запятой) вместо регионов, занеси в бд или проверяй условиями нужные координаты и выбирай.
Точка не будет утекать, если хранить одну точку в глобальной переменной и для мгновенных операций перемещать ее и использовать дальше по назначению.
  1. В шапку над триггерами вставляешь этот код:
function RegionInit takes nothing returns nothing
//17/11/2016
    set udg_GL = Location(0.0, 0.0)
    set udg_RegionNumber = GetRandomInt(1, 4) // выбрать количество регионов
    set udg_RegionX1 = GetRectMinX(udg_Region[udg_RegionNumber])
    set udg_RegionY1 = GetRectMinY(udg_Region[udg_RegionNumber])
    set udg_RegionX2 = GetRectMaxX(udg_Region[udg_RegionNumber])
    set udg_RegionY2 = GetRectMaxY(udg_Region[udg_RegionNumber])
endfunction

  1. Создаешь глобальные переменные типа:
    • точка с названием GL
    • регион массив с названием Region
    • целочисленная с названием RegionNumber - для хранения номера выбранного региона
    • реальное число с названиями RegionX1, RegionX2, RegionY1, RegionY1 - для хранения координат выбранного региона
После действий на картинке в инициализацию вставляешь кастом скрипт:
call RegionInit()

  1. Перед каждым созданием юнита вставляешь кастом скрипт:
call MoveLocation(udg_GL, GetRandomReal(udg_RegionX1, udg_RegionX2), GetRandomReal(udg_RegionY1, udg_RegionY2))
В окне действия с созданием юнита используешь свою переменную GL
ответ
Лови карту.
ответ
Steal nerves:
циклом (данного юнита от 1-6 слотов, на jass от нумерация слотов начинается так 0-5) пробегаешься по каждому слоту и проверяешь тип, кол-во зарядов. я на гуи что-то не нашел эту команду UnitItemInSlot
native UnitItemInSlot takes unit whichUnit, integer itemSlot returns item
кол-во итемов
ищем в каждом слоте один и тот же тип предмета. Этот код считывает кол-во итемов занимаемые в слотах
local integer id = ''//id-предмета, забудь указать в кавычках ид
local integer i=0 //для цикла
local integer c=0 //кол-во предметов
local unit u = //нужно не забыть указать юнита
//внизу начинается цикл, его блок 
loop //начало цикла
    exitwhen i > 5 //условие выхода из цикла
    if GetItemTypeId(UnitItemInSlot(u,i)) == '' then //если тип в слоте равен ....
        set c = c + 1
    endif
    set i = i + 1
endloop //конец цикла
кол-во предметов данного типа с N зарядами
local integer id = '' //id-предмета, забудь указать в кавычках ид
local integer i=0 //для цикла
local integer c=0 //кол-во предметов
local unit u = //нужно не забыть указать юнита
loop
    exitwhen i > 5

    if GetItemTypeId(UnitItemInSlot(u,i)) == id or GetItemCharges(UnitItemInSlot(u,i)) == 5 then //если тип в слоте такой, и и у этого итема зарядов равно 5
        set c = c + 1
    endif
    set i = i + 1
endloop
set u = null
ответ
добавляешь обоих
блокируешь улучшенного при старте карты всем игрокам
лучший и простейший вариант
ответ
без мемхака - нет

23

» WarCraft 3 / Вопрос по карте!

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
Wyett, ты можешь добавлять подобные этим:
function ... takes ... returns ...
Код
endfunction
Резака купить можно, но это будет абсолютно не похоже на покупку дирижабля.
ответ
Ну тут есть инфа xgm.guru/p/wc3/powerups
ответ
PT153:
Также стоит помнить, что в 1.30.4+ намутили со слотами игроков. Это нужно иметь в виду, если нет галки "Фиксированные настройки игроков" во вкладке "Кланы". Если она стоит, то проблем не будет.
Валерия:
Нельзя.
Что нельзя?
Я речь вёл про перенос со старых версий на новые.
Короче открываем новые версии редакторов jngp скоро к нам подтянется))

23

» WarCraft 3 / Условие в цикле на ГУИ и возможно ли это?

Похожие вопросы:

ответ
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка
Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
ответ
XGM Bot:
Похожие вопросы:

ответ
в джасс нету двухмерных
они есть в вджасс
можешь хоть 100 мерный но размеры массива надо заранее указывать размер массива
ответ
читаем последние комментарии, и юзаем поиск


23

» WarCraft 3 / Не даётся способность.

Похожие вопросы:

ответ
~16GB:
JackFastGame,
оно не работает, придётся делать много уровневую абилку во всеми вариантами скорости, и самом у подсчитывать её
ответ
Satanugushka,
Generic Unit Event - Юнит завершает применение способности
И положить надо в инвентарь triggering unit
ответ
Steal nerves:
что вы такого сделали что у вас не убирается? есть станд. способности абилы раздел разведка
Есть близзардские нативки:
IsUnitVisible - проверка: юнит видим ли игроком
IsUnitInvisible - проверка: невидим ли юнит для игрока
IsUnitDetected - проверка: юнит обнаружен игроком
IsLocationVisibleToPlayer или IsVisibleToPlayer - проверка: видима ли точка игроком
UnitShareVision - поделиться обзором юнита с другим игроком. Короче другой игрок видит, что делает чужой юнит. Вам нужна именно эта нативка это наверное в гуи в разделе "юнит"
если имеете в виду общий обзор между игроками. то это в разделе союза между игроками (в гуи раздел игрок). но это распространяется на всех юнитов
есть еще в мем хаке
ответ
  1. Комбинация из нескольких.
  2. Используй таймеры.
ответ
~8gabriel8:
Можешь поместить Благодать в геройские способности и отключить у игрока, а потом триггерно включать, когда надо.

23

» WarCraft 3 / Переменные

Похожие вопросы:

ответ
Что такое "назначить пользовательский параметр юнита или предмета" и как им пользоваться?
Используется для сохранения каких-нибудь своих данных в этот конкретный предмет или юнита
Добрые люди, как присвоить глобальной переменной (целочисленной) цену определенного предмета (так чтобы если изменить цену в редакторе объектов, то в редакторе триггеров она сама изменялась) или какая главная характеристика определенного героя (разум, сила, ловкость).
Никак, только руками указывать или использовать это xgm.guru/p/fly-data
ответ
MKDimon, здесь вообще не надо проверять в локал плеере и синхронизировать
я конкретно про то, когда ты проверяешь наличие файла
globals
bolean IHaveConfig=false // булевае данные можно держать асинхронными
endfglobals

-твоя функция начало
if FileExists("config.ini") then
set IHaveConfig=true
else // это можно и не писать
set IHaveConfig=false // хотя он и так false
endif
-конец
И у каждого игрока переменная примет своё значение и это не вызовет никакого десинхрона, каждый игрок будет знать если ли у него конф или нет
Синхронизация нужна, если нужно чтобы игрока Красный, узнал о наличии конфига у игрока Синего
Синхронизировать нужно непостредственно ,то что считывает ReadString, я тебе писал функцию как строковый тип синхронить
синхронизатор целого переделай под стринг или ищи я писал ранее
function SyncInteger takes player p, integer val returns integer
if (GetLocalPlayer() == p) then
call StoreInteger(SyncCache, "", "", val)
endif
call TriggerSyncStart()
if (GetLocalPlayer() == p) then
call SyncStoredInteger(SyncCache, "", "")
endif
call TriggerSleepAction(2)// меньшнее значение вызывает десинх
call TriggerSyncReady()
return GetStoredInteger(SyncCache, "", "")
endfunction
а вообще там 131 патч завезли, в котором есть быстрый синх, а на луа скорее все свои плюшки, мб можно вернуться к прелоаду и не юзать мемхак
ответ
Простым способом это не сделаешь, т.к нельзя отловить кол-во полученного золото с убийства (патч 1.26). Но, если игрок не получает больше неоткуда золото, кроме убийства крипов, то можно ловить изменения голды игрока.
ответ
Дик, переменную можно скормить этому триггеру через JASS или Lua, но событие запишется на основании значения переменной на момент добавления события - можно сколько угодно менять переменную после этого, но триггер будет работать только на того юнита который был записан в переменную на момент когда добавлялось событие. Возможно действие "добавить событие к триггеру" в ГУИ тоже так умеет.
ответ
Эмм как насчет глобальных переменных, т.к в фильтрах ты не создаешь условия а только делаешь проверки, без разрыва потока вейтами, то глобалки доступное и изящное решение.

23

» WarCraft 3 / Ратуша

Похожие вопросы:

ответ
Handragor, вот именно то действие которое ты не удалил и отвечает за стандартные условия победы
ответ
Хз о чём ты, но попробуй добавить свою ратушу в список ратуш в игровых константах.
ответ
Здаров Фастик, вот пример, объясню как работает в талке.
ответ
вот стандартный набор функций мили игры в триггере инициализации:
    call MeleeStartingVisibility(  )
    call MeleeStartingHeroLimit(  )
    call MeleeGrantHeroItems(  )
    call MeleeStartingResources(  )
    call MeleeClearExcessUnits(  )
    call MeleeStartingUnits(  )
    call MeleeStartingAI(  )
    call MeleeInitVictoryDefeat(  )
По названиям функций думаю понятно что они делают, рассмотрим по подробнее MeleeInitVictoryDefea( )
function MeleeInitVictoryDefeat takes nothing returns nothing
    local trigger    trig
    local integer    index
    local player     indexPlayer

    // Create a timer window for the "finish soon" timeout period, it has no timer
    // because it is driven by real time (outside of the game state to avoid desyncs)
    set bj_finishSoonTimerDialog = CreateTimerDialog(null)

    // Set a trigger to fire when we receive a "finish soon" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)

    // Set a trigger to fire when we receive a "finish now" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)

    // Set up each player's mortality code.
    set index = 0
    loop
        set indexPlayer = Player(index)

        // Make sure this player slot is playing.
        if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
            set bj_meleeDefeated[index] = false
            set bj_meleeVictoried[index] = false

            // Create a timer and timer window in case the player is crippled.
            set bj_playerIsCrippled[index] = false
            set bj_playerIsExposed[index] = false
            set bj_crippledTimer[index] = CreateTimer()
            set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index])
            call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))

            // Set a trigger to fire whenever a building is cancelled for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
            call TriggerAddAction(trig, function MeleeTriggerActionConstructCancel)

            // Set a trigger to fire whenever a unit dies for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitDeath)

            // Set a trigger to fire whenever a unit begins construction for this player
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitConstructionStart)

            // Set a trigger to fire whenever this player defeats-out
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)

            // Set a trigger to fire whenever this player leaves
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)

            // Set a trigger to fire whenever this player changes his/her alliances.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE)
            call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
            call TriggerAddAction(trig, function MeleeTriggerActionAllianceChange)
        else
            set bj_meleeDefeated[index] = true
            set bj_meleeVictoried[index] = false

            // Handle leave events for observers
            if (IsPlayerObserver(indexPlayer)) then
                // Set a trigger to fire whenever this player leaves
                set trig = CreateTrigger()
                call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
                call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
            endif
        endif

        set index = index + 1
        exitwhen index == bj_MAX_PLAYERS
    endloop

    // Test for victory / defeat at startup, in case the user has already won / lost.
    // Allow for a short time to pass first, so that the map can finish loading.
    call TimerStart(CreateTimer(), 2.0, false, function MeleeTriggerActionAllianceChange)
endfunction
Вроде много, но тут все просто, создается три триггера один следит за тем сколько построил зданий любой играющий игрок, второй следит сколько зданий погибло у любого играющего игрока, ну а третий следит за теми кто ливнул, чтобы их не преребирать, два прочих вспомогательные, следят за отмненой строительства и прочее.
Итого делаем вывод, чтобы узнать проиграл или нет игрок, нам нужно узнать сколько у него живых зданий, меньше 1 игрок проиграл. А реализовать это можно как угодно, триггерами следящими за смертями и прочим или таймером, который будет переодически считать все здания каждого игрока и давать поражение тем игрокам у кого не осталось ни одного здания...
ответ
Выбираешь юнитов в области и делаешь проверку:
(IsUnitType(GetEnumUnit(), UNIT_TYPE_TOWNHALL).
Ну ещё нужно проверить, является ли выбранная ратуша противником конкретного игрока.
Если да, то послать туда войска и т. д.

23

» WarCraft 3 / Сложная система производства пищи

Похожие вопросы:

ответ
Ну TriggerCondition не создает утечки, он остаётся висеть в boolexpre а вот triggeraction нужно удалять в месте с триггером ( если триггеры создаются и удаляются )
А так разницы немного, не работают вейты и другой лимит операций.
ответ
Steal nerves:
Вроде можно как TriggeringUnit, ибо ссылается на одного юнита. Взял бы проверил сам дебагом, название юнита выводи на экран
по-другому никак
Кроме событий почти никак, можно периодически таймером проверять. Вот можно проверять периодически с помощью группы и счётчика кол-во юнитов в области, стало ли больше или меньше. Неудобно. Юнит выбран можно также заменить периодической проверкой таймером, есть условием - юнит выбран игроком, то есть вами, через GetLocalPlayer(), не знаю дисихрон будет. Или какой-то другой игрок. Наверное тоже неудобства есть.
ответ
ReD_Unicorn, этот триггер вовсе не сработает, т.к у него нету действий.
Проверяет только условие триггера, функцией TriggerEvalute наследуя параметры потока. Это никак не влияет на ветвление в действии триггера.
TriggerConidtion и TriggerAction никак не связаны, это две отдельные функции, первая при этом возвращает логическое значение.
ответ
Нет. Я пока хочу достроить карту на GUI, думаю мне осталось дней 10-30 работать, а буду ли следующую делать - под вопросом. Не хочется тратить время на изучение jass из-за пустяка! Однако Я использовал Custom Script, но это было содрано с одного сайта, а вот чтобы делать самому нужно сначала полностью изучить язык. Либо знаю, либо нет, чуть-чуть не считается!
Что касается wait, то если не это то что тогда?
Опытным путём сам установил что в процесс ничего не вклинивается. Можно использовать Триггер как Функцию и ссылаться на него в другом Триггере. По сути, это и есть функция, если глянуть на jass. Вопрос закрыт.
ответ
Не особо понятно, но на видео по моему только освещение меняется, без тумана. Тобишь не триггеров не джаса не нужно, просто отредактируй модель освещения через War3ModelEditor, или поищи готовые.

Если же все таки нужен динамический туман, то Окружение-SetFog (SetTerrainFogExBJ( 0, startdist, enddist, A, R, G, B))
Таймером или периодическим триггером меняешь нужные тебе значения дистанции, цвета или прозрачности.
+ если хочешь чтоб туман плавно переходил в небо, то нужна кастомная модель неба (текстура заливкой одним цветом), которая будет иметь такие же значения цвета на каждом кадре какие ты назначаешь триггерно таймером.

23

» WarCraft 3 / Неправильный код компактного диска

Похожие вопросы:

ответ
Audes, в Warcraft 3 используется свой движок, написанный Blizzard и он находится в закрытом доступе.
ответ
~8gabriel8:
Если у тебя в JNGP есть это, то можешь там смотреть/менять.
А вообще про путь к шрифту ты же спрашивал: Fonts/FRITZQT__.ttf
ответ
Поскольку Гризельда в дальнейшем сюжете участие не принимает, могу сказать, что пока это канон.
ответ
~8gabriel8:
Каждый вопрос заслуживает отдельного обсуждения, а на все стало лень ответ печатать, когда начал.
Печатать реально долго, легче было реализовать примеры в карте:
Кроме последнего пункта, его нужно персонально рассматривать, так как игра не подразумевает использование для юнита двух списков. Например, можно наполнить список построек у юнита всеми зданиями, часть из которых блокировать при открытии одного списка и разблокировать при открытии второго, но это подходит, когда один рабочий. Можно сделать второй список из книги заклинаний, куда добавлены способности на основе игрушечных строений, чтобы было видно карту пути и всё такое, но там для них используется один приказ, то есть всегда одинаковое здание будет при нажатии на любую способность, а ещё нет стоимости золота и дерева, что тоже придётся как-то ваять триггерно. Можно перевоплощать юнита при смене списка в другого, но там тоже сложности, не помню точно какие, вроде бы связаны с расой, так как все строят по-разному.

С точкой сбора всё просто. Способность у игрока не заблокировать, потому нужно забрать её у всех зданий, которые есть на карте, либо будут построены.

Группа из максимум 9 юнитов работает немножко коряво, ранее мы с PT153 находили какой-то вариант, чтобы работало быстро, но лень пользоваться поиском. Вроде каждую 0.01 секунду проверялось количество выбранных юнитов, лишние удалялись из выбора.

Чтобы не было очереди, пришёл в голову лишь вариант с апгрейдом здания. Но у меня реализован просто пример для одного конкретного здания, а для нескольких абстрактных зданий нужно делать текстовым триггером, который будет для каждого здания запускать локальный таймер на нужное время и добавлять анимационный текстаг work. По отмене апгрейда, либо истечению таймера анимационный тег удаляется и создаётся воин, к которому привязывается соответствующий звук. Но есть и другие варианты, типа создавать внутри здания другое, которое реально будет производить юнитов, когда заказал апгрейд, там иная реализация. И не упомянул про затрачиваемые ресурсы. Потребуется забирать/возвращать часть ресурсов при отмене апгрейда.

На примере триггеров и фиолетовых строк в редакторе объектов смотри, как сделано улучшение Бугая в Дренорского бугая.

Конечно, мог бы сделать MUI триггер на GUI для отсутствия очереди, но это было бы громоздко и в техническом смысле уродливо. производящие здания заносились бы в массив, для которого будет массив таймеров, которые будут заноситься в виде событий на истечение таймера в другой триггер, а точнее будет несколько массивов таймеров, по максимальному числу тренируемых юнитов в любом производящем здании.

Нашёл твои вопросы:
В них бы и спрашивал, что непонятно. А то тебе отвечают, а ты игнорируешь, словно очень умный.
Тебе даже вариант без триггеров для четвёртого пункта сделали: xgm.guru/p/wc3/230191/comments?postid=426457#comment5

23

» WarCraft 3 / Нет описания способности

Похожие вопросы:

ответ
Zeuz, в доте нету такого количества таймеров
во многих нормальных картах сделано так как в статьях
Zeuz:
покажи пример в обычном jass
скопируй в карту а потом вытащи из неё j файл или напиши в коде букву на отдельной строке (тогда тебе выдаст ошибку и будет показан исходный код)
но на обычном джассе этот код больше и писать/читать его неудобно так что держи
ответ
какого кода?
где ты вообще код достал

23

» WarCraft 3 / Настройка модели

Похожие вопросы:

ответ
Редактируй
UI\SoundInfo\AnimLookups.slk
UI\SoundInfo\AnimSounds.slk
Откроешь их, посмотри как все устроено. Разберешься.
Не благодари.
ответ
Darknessay:
Hate:
через мдлвис можно делать видимость поверхностям, массово, МЕ для этого не нужен
Не замечал такой функции. Где она?
ответ
~8gabriel8:
Достаточно низкие настройки?
Увеличил размер с 100х100 до 128х128 и пересчитал границы у модели:

23

» WarCraft 3 / Проблемы с редактором карт

Похожие вопросы:

ответ
XGM Bot:
Похожие вопросы:

ответ
советую переименовать модель\заребутить комп
текстуры стандартные юзал, я так понимаю

ответ
Проблема решена. Я сделал так: Удалил все триггеры и потом по папочке восстанавливал, когда нашли в чем проблема удалили триггер и все заработало, спасибо за помощь!

23

» WarCraft 3 / Нестандартная карта путей

Похожие вопросы:

ответ
vlad2010pilot, как изменить текст Предметы я уже написал.
А то что ты хочешь изменить (Меню паузы или Таблица рекордов) лежит:
Граница - UI\Widgets\EscMenu\Human\editbox-border.blp
Кнопка развертывания - UI\Widgets\Glues\Gluescreen-Scrollbar-DownArrow.blp
Кнопка сворачивания - UI\Widgets\Glues\Gluescreen-Scrollbar-UpArrow.blp
Фон - UI\Widgets\EscMenu\Human\editbox-background.blp
ответ
Есть программа, но не на этом сайте. Названия не помню, поищи на Дотерских сайтах по вару. Возможность есть.
ответ
Резюмируя:
  • стремиться создавать объекты не на карте, а в триггерах, сохраняя ссылки на нужные из них;
  • там, где в гуи открываются окна со списком из РО, использовать джасс и вводить равкод, а там, где список расставленных на карте юнитов, использовать переменные;
  • в РО с полями, где указаны объекты, работать через Shift+Enter и вводить равкод, чтобы не открывать список.
*Равкод в РО можно посмотреть, нажав Ctrl+D

23

» WarCraft 3 / Как сделать превращение?

Похожие вопросы:

ответ
Что за ахинея? Какой дум гуард?
Морфы настраивайте так как они были настроены у дефолтных героев \ юнитов, герой должен превращаться только в героя, обычный юнит - только в обычного юнита, здание только в здание! Если вам нужно чтобы вместо героя появился каконибудь крип ( не герой ) используйте ульт панды пивовара.
Делайте морф из метаморзфозы демонхантера, делайте все как было сделано у демонхантера, тогда оно будет работать, надеюсь понятно?:
Про побочные эффекты морфов и прочее есть статья - ссылка
ответ
~8gabriel8:
Можешь на основе способности Тёмный сделать
ответ
Steal nerves:
так вроде там морф (спец абилка). после естественной смерти юнит морфится (событие смерти никак не отслеживается). И это легко отслеживается через "приводит в действие".
используй всегда дебаги, выводи на экран. я тоже не всегда знаю, проверяю
подробные абилки
Феникс 'AHpx' - вызывает феникса (можно указать кол-во вызванных). Появляется рядом с кастером. Может вызвать безграничное число птиц. Но есть один нюанс со фениксом - у него есть способность 'Превращение в феникса' Aphx, которое после гибели превращает яйцо. Эта способность не позволяет призывать больше одной жар-птицы. Нельзя отследить кастера - того кто призвал эту птицу (debug показывает что феникс призывает феникса, то есть он сам себя призвал)
Превращение в феникса 'Aphx' - морф работает при смерти. У фенникса каждый раз становится хп меньше (так специально сделали в РО: у феникса отрицательный реген), и когда умрет естественной смертью (не от руки врагов), тогда превращается в яйцо (такой цикл). Яйцо просуществует несколько секунд (можно задать длительность морфа, если задать 0.00 - постоянный морф). После из яйца рождается феникс.
ответ
~8gabriel8:
Интересно про звук смерти, ранее на это внимания не обращал. Но вообще сами модели не менял, просто сделал копии модели портрета для всех игровых вооружённых моделей.

Проверил звук предсмертного крика, похоже на проблемы с самими вооружёнными моделями, а именно звук смерти не привязан к кости и выставлен не на то время анимации. Потому что не только звук проигрывается позже, но и при смерти одного бойца, проигрывания крика в период разложения тела, а потом смерти другого бойца, вскоре опять кричит первое тело. Но посмотрю модели опять позже.
Как ты мог заметить, работаю над картой лишь по чуть-чуть вечерами. Потому что много дел, банально до тебя очередь доходит лишь перед сном. Поэтому проверяй и тестируй работу триггеров уж самостоятельно, ну то есть всё, как у нас обычно происходит)
В этот раз с триггерами вроде всё закончил.
Приказы на выкидывание/передачу предмета из инвентаря не получилось отследить, по крайней мере проверка не показала, что это приказ Щелчок правой кнопкой мыши, потому сделал костыльные методы. Теперь система состоит из 5 триггеров:
  • Первый триггер отлавливает использование оружия, чтобы в нём не срабатывали события костыльных триггеров на потерю предмета, устанавливаю в начале логической переменной значение Да. Костыльные триггеры срабатывают, лишь когда значение переменной Нет. Потом циклом по А просматриваем слоты инвентаря юнита, когда в слоте будет лежать используемое оружие, присваеваем его номер переменной, запоминаем в переменную тип предмета и уничтожаем его, обнулив те значения, которые мы заблаговременно запомнили. Далее соотносится каждое оружие с типом предмета, если совпало, то создаём в запомненном слоте аналог Разоружиться для этого оружия и накидываем соответствующий Тёмный. И потом опять цикл проверки слотов, кроме того, где использованное оружие, но уже цикл по В, так как два цикла по одному значению в одном триггере обычно сбоят. Этот цикл проверяет остальные предметы на разные Разоружиться, если вдруг юнит просто меняет, например, пистолет на автомат, и заменяет Разоружиться соответствующим оружием. В самом конце логическую переменную устанавливаем на Нет;
  • Второй триггер реагирует на использование Разоружиться, в нём тоже запоминаем слот и тип предмета перед удалением, потом даём юниту соответствующее оружие, а установка безоружного Тёмного для уменьшения объёма выполняется в костыльном триггере;
  • Третий триггер заменяет Разоружиться у бойца на соответствующее оружие, если оно было передано ему другим бойцом;
  • Четвёртый триггер устанавливает безоружного Тёмного, когда юнит теряет этот предмет, а заодно назначает переменную для предмета и запускает минимальный таймер, что необходимые для пятого триггера;
  • Пятый триггер проверяет через минимальное время, есть ли предмет на карте, так как при передаче кому-то Разоружиться было бы удалено. Если бы был удалён, то тип предмета не определялся бы, триггер не выполнился бы по условию. Далее запоминается тип предмета и его локация, он удаляется, а на его месте создаётся соответствующее оружие.

23

» WarCraft 3 / Нестандартные Модели.

Похожие вопросы:

ответ
Еще проблема может бить в отсутствии текстур для модели где-то, в неправильном импорте (проверь пути файлов).
Вообще я не спец по кампаниям, но попробуй убрать все из карт и кинуть в общее.
ответ
Мне кажется, что добавить простенькую анимацию исчезновения, длинною в кадр было бы самым разумным и простым решением. Научу в личке, если хочешь.
ответ
Куда угодно, но путь к папке и путь к программе (если не ошибаюсь) не должен содержать кириллицу.
ответ
~8gabriel8:
Смотри карту: xgm.guru/files/100/219921/comments/408338/0.w3x
Там для героев созданы их копии с другой моделью и нестандартные способности на основе способности Тёмный, которая заменяет юнита на указанного другого. Такой вариант не меняет имя героя, порядок предметов в инвентаре, кулдаун на предметах и способностях, но что-то упоминали ранее о возможных глюках с наложенными заклинаниями. Триггерно при использовании способности не на иллюзии героя добавляем ему нестандартную способность нужного типа.
Вариант с заменой юнита, примерно как ты описал, приведёт к сбросу имени, опыта, способностей, кулдаунов, предметов и заклинаний.
Вариантом морфа героя через руны не умею пользоваться.
Вариант с заменой текстуры персонажа через способность Вырвать дерево требует замены текстур деревьев в карте, а это плохо, так как героев много. Ещё это подразумевает умение работать с 3D-редакторами, которого, как предполагаю, у тебя нет.

23

» WarCraft 3 / Перенос всех нестандартных объектов из карты

Похожие вопросы:

ответ
Это тема для блога, а не академии.
ответ
Переменная "точка" это не просто два числа.
Она хранит объект - ссылку на место в памяти, где хранятся эти два числа.
Пока ты не вызовешь RemoveLocation, эта точка будет висеть в памяти.
Когда ты присваиваешь переменной новое значение, старый объект не удален, но появляется новый объект с другими координатами, и твой триггер создает 200 точек в секунду.
Чтобы поменять координаты не создавая новый объект, есть функция MoveLocation
ответ
~8gabriel8:
Leer_Lie, ну вот пробуй другие редакторы и проверяй. А вообще можешь просто создать дополнительную кампанию из этих карт.
ответ
Кложуры и передача данных с их помощью в нативные каллбеки от форгрупа и таймеров через анонимные функции.
Динамическая природа языка, позволяющая в любой момент времени заменить любую функцию чем-то другим. Хороший пример - оборачиваем вызов RemoveUnit своей оберткой и делаем какие-то действия перед тем как вызвать настоящий RemoveUnit.
Своеобразное но рабочее ООП.
Таблицы которые одновременно и массив и хештаблица и ассоциативный массив и при этом очень быстро работают.
Передача и хранение функций в параметрах и переменных.
Передача массивов в параметрах.
Метатаблицы и метаметоды, позволяющие переопределять поведение таблиц в разных ситуациях - добавление и получение элементов, различные операторы, вся эта фигня. Пример - можно запилить "класс" вектор и пользоваться векторной математикой без костылей, переопределив для векторов операторы сложения, вычитания, умножения и так далее.

Вобще, давно пора завести статью на эту тему и собирать там все мелкие и большие фишечки и возможности Lua в сравнении с JASS.

23

» WarCraft 3 / Размножение

Похожие вопросы:

ответ
Ухаха. Парень, ознакомься, что такое утечки, прикрепление в помощь.

23

» WarCraft 3 / Характеристика предмета

Похожие вопросы:

ответ
Там же есть функция, мол создать случайный предмет уровня N, и всё
ответ
Либо shift + enter, либо редактированием слк.
ответ
Roy Mustang:
Chosen2:
p.s Посмотрел карту, так а как вы на поясе установили отрицательное значение?
Shift+клик по строке где статы позволяет установить отрицательные значение практически у всего что есть в варике в РО (если не работает в твоем случае то вкл эту функцию вот здесь )
ответ
  1. Есть функция проверки кол-ва ловкости героя, при этом можно посмотреть сколько ловкости от характеристик и сколько от предметов, исходя из кол-ва ловкости вручать предметные абилки на атаку.
  2. Самое простое - апгрейды, триггерно повышать уровень улучшения которое будет действовать на героя, увы это не идеальный вариант, но один из самых просты. Так же вручать способности предметов на регенерацию здоровья \ маны.
  3. Напрямую - никак, есть место только под 5 способностей. Делать свою систему прокачки способностей из спеллбука или какие либо еще способы, на подобии рпгшных карт.

23

» WarCraft 3 / Сохранение Игры

Похожие вопросы:

ответ
конечно
пруф
а вообще можно вспомнить кампанию людей - там есть миссия по защите Стратхольма, или как та деревня называлась - и там есть таймер, который нормально сохраняется
ответ
Закрываем вопрос, причина была в снятой галочке про "включение локальных данных"
Лучший вариант: Datamanager+EnableLocalFiles
ответ
А её и не надо создавать
Смотри в сторону счетчика игр (ливнул/ доиграл до конца)
в коде всё есть и хорошо разжевано, что непонятно - спрашивай
Только тут начало идёт от какого-то 1940 (не помню число, надо с 0 начать считать), как начнёшь ковырять, сразу всё поймёшь

23

» Unity / Анимация

Похожие вопросы:

ответ
Tiodor, возможно. Но самый замечательный вариант это сгенерировать мэш с правильными текстурными координатами. И тогда ничего хитрого не надо придумывать. Поэтому надо курить генерацию мэша
ответ
Разве это не показано в этом коде?
ответ
Чтобы переместить костную анимацию в движок, сначала надо перепечь анимацию с рига на кости

23

» WarCraft 3 / Как сделать видимость за игроком?

Похожие вопросы:

ответ
в константах настраивается
там есть таблица опыта
ответ
Steal nerves:
была где-то тема в точь-точь у нас на сайте xgm.guru/forum/showthread.php?t=60325
вот скинул кучу все что связано с видимостью